/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import oracle.jdbc.OracleTypes;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.factories.*;

/**
 *
 * @author Eduardo Cavero Guzmán
 * @date 31/03/2010
 */
public class RequisitoDespachador {
    public static List<Requisito> obtenerRequisitosDisponibles(int ntidoIdentificador) throws SQLException{
        List<Requisito> lstRequisitos=new ArrayList<Requisito>();
        Connection conn=null;
        try{
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_REQUISITOS_DISP(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, ntidoIdentificador);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(2);
            while(rs.next()) {
                Requisito requisito = new Requisito();
                TipoDocumento tipo = new TipoDocumento();
                tipo.setNtidoIdentificador(rs.getInt("NTIDO_IDENTIFICADOR"));
                tipo.setCtidoDescripcion(rs.getString("CTIDO_DESCRIPCION"));
                requisito.setTipoDocumento(tipo);
                lstRequisitos.add(requisito);
            }
        }finally{
            ConnectionPool.liberarConexion(conn);
        }
        return lstRequisitos;
    }

    public static List<Requisito> obtenerRequisitosAsignados(int ntidoIdentificador) throws SQLException{
        List<Requisito> lstRequisitos=new ArrayList<Requisito>();
        Connection conn=null;
        try{
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_REQUISITOS_ASIG(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, ntidoIdentificador);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(2);
            while(rs.next()) {
                Requisito requisito = new Requisito();
                TipoDocumento tipo = new TipoDocumento();
                tipo.setNtidoIdentificador(rs.getInt("NTIDO_IDENTIFICADOR"));
                tipo.setCtidoDescripcion(rs.getString("CTIDO_DESCRIPCION"));
                requisito.setTipoDocumento(tipo);
                lstRequisitos.add(requisito);
            }
        }finally{
            ConnectionPool.liberarConexion(conn);
        }
        return lstRequisitos;
    }


    public static void agregarRequisito(Requisito requisito) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_AGREGAR_REQUISITO(?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, requisito.getNtidoIdentificadorPrincipal());
            cs.setInt(2, requisito.getNtidoIdentificadorRequisito());
            cs.setString(3, requisito.getCrequObservacion());
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void eliminarRequisito(Requisito requisito) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{ call SP_ELIMINAR_REQUISITO(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, requisito.getNtidoIdentificadorPrincipal());
            cs.setInt(2, requisito.getNtidoIdentificadorRequisito());
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }
}
